#ifndef LONGKEY_COMMON_WMI_QUERY_H_
#define LONGKEY_COMMON_WMI_QUERY_H_

#include <Windows.h>
#include <atlstr.h>
#include <atlcomcli.h>
#include <WbemCli.h>
#include "basictypes.h"

class WmiQuery
{
public:
	WmiQuery();
	~WmiQuery();

	// Connects to the server to get WMI service.
	HRESULT Connect(const TCHAR* resource);

	// Queries the service.
	HRESULT Query(const TCHAR* query);

	// Reads the next row.
	HRESULT Next();

	// Returns true at the end.
	bool AtEnd();

	// Gets the value of the named property.
	HRESULT GetValue(const TCHAR* name, CComVariant* value);
	HRESULT GetValue(const TCHAR* name, CString* value);
	HRESULT GetValue(const TCHAR* name, bool* value);
	HRESULT GetValue(const TCHAR* name, int* value);
	HRESULT GetValue(const TCHAR* name, uint32* value);

private:
	CComPtr<IWbemLocator> wbem_;
	CComPtr<IWbemServices> service_;
	CComPtr<IEnumWbemClassObject> enumerator_;
	CComPtr<IWbemClassObject> obj_;
	bool at_end_;

	DISALLOW_EVIL_CONSTRUCTORS(WmiQuery);
};

#endif	// LONGKEY_COMMON_WMI_QUERY_H_